get_block_wrapper_attributes: Ensures that user-provided attributes override the attributes generated by block supports#10922
Conversation
…verride the attributes generated by block supports
Co-authored-by: Weston Ruter <[email protected]>
Co-authored-by: Weston Ruter <[email protected]>
Co-authored-by: Weston Ruter <[email protected]>
|
The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the Core Committers: Use this line as a base for the props when committing in SVN: To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. |
Test using WordPress PlaygroundThe changes in this pull request can previewed and tested using a WordPress Playground instance. WordPress Playground is an experimental project that creates a full WordPress instance entirely within the browser. Some things to be aware of
For more details about these limitations and more, check out the Limitations page in the WordPress Playground documentation. |
|
|
||
| $attributes[ $attribute_name ] = $extra_attributes[ $attribute_name ] . ' ' . $new_attributes[ $attribute_name ]; | ||
| if ( $is_merged ) { | ||
| $attributes[ $attribute_name ] = $extra_attributes[ $attribute_name ] . ' ' . $new_attributes[ $attribute_name ]; |
There was a problem hiding this comment.
For posterity, #10877 (comment):
In the case of merging
style, should special handling be added to ensure that$extra_attributes[ $attribute_name ]ends in a semicolon? The current empty space is only really appropriate forclass.
|
Sorry for the late reply. After some consideration, I decided to refactor the
|
| $new_attribute = is_string( $new_attribute ) ? $new_attribute : ''; | ||
| $extra_attribute = is_string( $extra_attribute ) ? $extra_attribute : ''; |
There was a problem hiding this comment.
Sanitize non-string attribute values here.
| ); | ||
|
|
||
| $expected_classes = 'foo-bar-class wp-block-example has-text-color has-red-color has-background has-black-background-color'; | ||
| $expected_styles = 'test: style;'; |
There was a problem hiding this comment.
We shouldn't have used the invalid inline styles in the test in the first place.
Co-authored-by: Weston Ruter <[email protected]>
Co-authored-by: Weston Ruter <[email protected]>
Co-authored-by: Weston Ruter <[email protected]>
Co-authored-by: Weston Ruter <[email protected]>
Co-authored-by: Weston Ruter <[email protected]>
There was a problem hiding this comment.
Pull request overview
This PR adjusts how get_block_wrapper_attributes() combines block-support-generated wrapper attributes with additional attributes supplied by the block renderer, and updates/extends PHPUnit coverage to reflect the new merging behavior.
Changes:
- Refactors
get_block_wrapper_attributes()to use per-attribute merge/override callbacks forstyle,class,id, andaria-label. - Normalizes merged
styleoutput (e.g., trimming redundant semicolons) and de-duplicates mergedclasstokens. - Updates
supportedStyles.phpexpectations and adds a data-driven test for merge/override behavior.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
src/wp-includes/class-wp-block-supports.php |
Refactors wrapper attribute merge/override logic in get_block_wrapper_attributes(). |
tests/phpunit/tests/blocks/supportedStyles.php |
Updates expected style strings and adds a data provider test for wrapper attribute merging/overriding. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| ), | ||
| 'expected_attribute' => 'style="margin-top: 2px;color:#000"', | ||
| ), | ||
| ), |
There was a problem hiding this comment.
Fow now, I don't plan to merge individual CSS properties, as doing so would require more complex parsing and feels out of scope for this PR.
Co-authored-by: Weston Ruter <[email protected]>
Co-authored-by: Weston Ruter <[email protected]>
Co-authored-by: Weston Ruter <[email protected]>
| public function data_get_block_wrapper_attributes_merge_or_override(): array { | ||
| return array( | ||
| 'extra style attributes are merged with block values' => array( | ||
| array( |
There was a problem hiding this comment.
This extra array() wrapper should be removed.
| * @param array{ | ||
| * block_type_settings: array<string, mixed>, | ||
| * block_attrs: array<string, mixed>, | ||
| * extra_attributes: array<string, string>, | ||
| * expected_attribute: string | ||
| * } $data Data from the provider. | ||
| */ | ||
| public function test_get_block_wrapper_attributes_merge_and_override( $data ) { |
There was a problem hiding this comment.
With the removal of the wrapper arrays, this can be changed to:
| * @param array{ | |
| * block_type_settings: array<string, mixed>, | |
| * block_attrs: array<string, mixed>, | |
| * extra_attributes: array<string, string>, | |
| * expected_attribute: string | |
| * } $data Data from the provider. | |
| */ | |
| public function test_get_block_wrapper_attributes_merge_and_override( $data ) { | |
| * @param array<string, mixed> $block_type_settings | |
| * @param array<string, mixed> $block_attrs | |
| * @param array<string, string> $extra_attributes | |
| * @param string $expected_attribute | |
| */ | |
| public function test_get_block_wrapper_attributes_merge_and_override( array $block_type_settings, array $block_attrs, array $extra_attributes, string $expected_attribute ): void { |
Co-authored-by: Weston Ruter <[email protected]>
Co-authored-by: Weston Ruter <[email protected]>
|
@westonruter Thanks for the review! |
Note
This PR is the same as #10877. I submitted this new PR because I accidentally closed #10877 and it can no longer be reopened.
Trac ticket: https://core.trac.wordpress.org/ticket/64603
This Pull Request is for code review only. Please keep all other discussion in the Trac ticket. Do not merge this Pull Request. See GitHub Pull Requests for Code Review in the Core Handbook for more details.